/*
//
//              INTEL CORPORATION PROPRIETARY INFORMATION
//  This software is supplied under the terms of a license  agreement or
//  nondisclosure agreement with Intel Corporation and may not be copied
//  or disclosed except in  accordance  with the terms of that agreement.
//    Copyright (c) 2007 Intel Corporation. All Rights Reserved.
//
//
*/

#ifndef __UMC_AVS_DEC_H
#define __UMC_AVS_DEC_H

#include "umc_video_decoder.h"

namespace UMC
{

// forward declaration of used classes
class AVSFusionCore;
class AVSThread;

class AVSVideoDecoder : public VideoDecoder
{
public:
    // Default constructor
    AVSVideoDecoder(void);
    // Destructor
    virtual
    ~AVSVideoDecoder(void);

    // Initialize the codec
    virtual
    Status Init(BaseCodecParams *init);

    // Decompress the next frame
    virtual
    Status GetFrame(MediaData *in, MediaData *out);

    // Get codec's parameter(s)
    virtual
    Status GetInfo(BaseCodecParams *info);

    // Close all codec's resources
    virtual
    Status Close(void);

    // Set the codec to an initial state
    virtual
    Status Reset(void);

    // Additional methods
    // Reset skip frame counter
    virtual
    Status ResetSkipCount(void);
    // Increment skip frame counter
    virtual
    Status SkipVideoFrame(Ipp32s);
    // Get skip frame counter statistic
    virtual
    Ipp32u GetNumOfSkippedFrames(void);

protected:

    AVSFusionCore *m_pCore;                                     // (AVSFusionCore *) pointer to a AVS fusion core
    AVSThread *m_pThreads;                                      // (AVSThread *) pointer to an array of working threads
    Ipp32u m_numThreads;                                        // (Ipp32s) current number of working threads
};

} // namespace UMC

#endif // __UMC_AVS_DEC_H
